package com.design3.graduatethesissys.common.utils;

import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

public class FileUtil {
    //静态资源路径，你们可以自己设置
    public static String getStaitc_Path(){
        String c = System.getProperty("user.dir");
        return c+"\\src\\main\\resources\\static\\word\\";
    }

    //直接传file的接口
    public static String uploadFile(File originFile,String id,String type){
        MultipartFile file = null;
        try {
            InputStream inputStream = new FileInputStream(originFile);
            file = new MockMultipartFile(originFile.getName(), inputStream);
        } catch (IOException e) {
            e.printStackTrace();
            return "上传失败，请选择文件";
        }
        return upload(file,id,type);
    }
    //上传功能接口，需要提供MutipartFile类型的file参数，上传者的Id，上传文件的类型（例如“中期报告”等）可在单值代码表中查看
    public static String upload(MultipartFile file,String id,String type) {
        if (file.isEmpty()) {
            return "上传失败，请选择文件";
        }
        String fileName = file.getOriginalFilename();
        String filePath = FileUtil.getStaitc_Path()+id+"\\"+type+"\\";
        File floder = new File(filePath);
        if(!floder.exists()){
            floder.mkdirs();
        }else{
            //删除文件
            File[] files=floder.listFiles();
            for(File oldFile:files){
                oldFile.delete();
            }
        }
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);
           //传成功");
            return "上传成功";
        } catch (IOException e) {
            System.out.println("上传文件出现异常！你看看FileUtil类？");
            e.printStackTrace();
        }
        return "上传失败！";
    }

    //下载功能接口，参数有HttpServletResponse，另外需要提供目标id(比如用户A要下载用户B上传的文件，这里要用到用户B的id)，还要有目标文件的类型type，
    // 比如“初期报告”，“type1”，“简介”等，可在单值代码表中查看
    public static String download(HttpServletResponse response, String id, String type) {
        String filePath = FileUtil.getStaitc_Path()+id+"\\"+type+"\\";
        String result = downloadWord(filePath, response);
        return result;
    }
    private static String downloadWord(String filePath, HttpServletResponse response){
        //浏览器下载后的文件名称showValue,
        File floder = new File(filePath);
        File[] files=floder.listFiles();
        if(files.length>0){
            File fileurl = files[0];
            String showValue = fileurl.getName();
            try{
                //System.out.println("===========文件路径==========="+fileurl);
                InputStream inStream = new FileInputStream(fileurl);
                String finalFileName = URLEncoder.encode(showValue,"UTF8");//其他浏览器
                //设置HTTP响应头
                response.reset();//重置 响应头
                response.setContentType("application/x-download");//告知浏览器下载文件，而不是直接打开，浏览器默认为打开
                response.addHeader("Content-Disposition" ,"attachment;filename=\"" +finalFileName+ "\"");//下载文件的名称
                byte[] b = new byte[1024];
                int len;
                while ((len = inStream.read(b)) > 0){
                    response.getOutputStream().write(b, 0, len);
                }
                inStream.close();
                response.getOutputStream().close();
            }catch(Exception e) {
                //e.printStackTrace();
                return "false";
            }
        }else {
            return "false";
        }
        return "true";
    }

    //判断当前用户状态是更新还是未上传，true为更新，false为未上传，
    //需要用到当前用户id，文件的类型type，可在单值代码表中查看
    public static String isUpload(String id,String type){
        //浏览器下载后的文件名称showValue,
        String filePath = FileUtil.getStaitc_Path()+id+"\\"+type+"\\";
        File floder = new File(filePath);
        if(!floder.exists()){
            return "false";
        }else{
            //删除文件
            File[] files=floder.listFiles();
            if(files.length!=0) {
            	return "true";
            }else {
				return "false";
			}
        }
    }
}
